﻿#pragma once

#define MAX_BASEDIRITEM 10
#define BslNameLength 64
#define BslPathLength 256
#define SubFileLength (248 + 64)
#define NameLength 32
#define TPRGBUF_LEN 512
#define GRPBUF_LEN 256
#define IDTBUF_LEN 512
#define AmtUnitLength 8
#define ConcUnitLength 16
#define UnitAliasLength 16
#define SpecLength 64
#define NoteLength 128
#define GUIDLength 37
#define MAX_RAMPITEM 32
#define _MaxAuxFloatRampItems_ 8
#define MAX_ARRAYITEM 512
#define MAX_SERIES 8
#define MAXCARD 2
#define MaxInstItemLength 4

#define TDateTime double

typedef void(CALLBACK *OnMyExtPostmessage)(HWND hWnd, DWORD msg, DWORD wParam, DWORD lParam);
typedef void(CALLBACK *OnMyAddInj)(char *RawBaseDir, char *szFile, int StopTime);
typedef void(CALLBACK *OnMyDataMerge)(int nCh, int nStartStop);
typedef void(CALLBACK *OnMyStopPostProcess)(LPVOID lpOnLineOption);
typedef void(CALLBACK *OnMyStopSample)(int nCh);
typedef void(CALLBACK *OnMyStopPostReanal)(char *szFile, LPVOID lpOnLineOption, BOOL bSnapshot);
typedef void(CALLBACK *OnMyStartSglRun)(int nCh);
typedef void(CALLBACK *OnMyStopAbortSglRun)(int nCh, BOOL bBusy, BOOL bAbort, BOOL bPausePressed, BOOL bLoopRun);
typedef void(CALLBACK *OnMyLicenceChange)(LPVOID pNewLicenceData, LPVOID pOldLicenceData);
typedef void(CALLBACK *OnMyChromScroll)(int nCh, double fX);
typedef void(CALLBACK *OnMyReAnalysis)(int Ch, BOOL bShowErr);
typedef void(CALLBACK *OnMyAdcDogStateChanged)();
typedef void(CALLBACK *OnMyReadFile)(char *szFile, char *szGuid);
typedef void(CALLBACK *OnMyWriteFile)(char *szFile, char *szDescryption, char *szGuid, int dCreateTime, int dModifyTime, LPVOID lpParam);

enum // 通道号
{
    CHANNEL_NONE = -1,
    CHANNEL_A = 0,
    CHANNEL_B = 1,
    CHANNEL_C = 2,
    CHANNEL_D = 3,
    MAX_CHANNEL = 4,
    CHANNEL_OFFLINE = MAX_CHANNEL,
    CHANNEL_OFFLINE_1 = CHANNEL_OFFLINE,
    CHANNEL_OFFLINE_2,
    CHANNEL_OFFLINE_3,
    CHANNEL_OFFLINE_4,
    CHANNEL_OFFLINE_5,
    CHANNEL_OFFLINE_6,
    CHANNEL_OFFLINE_7,
    CHANNEL_OFFLINE_8,
    CHANNEL_REPORT,
    CHANNEL_A_OFFLINE,
    CHANNEL_B_OFFLINE,
    CHANNEL_C_OFFLINE,
    CHANNEL_D_OFFLINE,
    MAX_OFFLINE_CHANNEL,
};

enum TUNITCODE // 时间单位代码
{
    BY_PER_MIN = 0, // min%
    BY_SECOND = 1,  // sec
    BY_MIN = 2,     // min
};

enum  //通讯协议代码
{
    PROTOCOL_NORMAL = 0,  //四字节协议
    PROTOCOL_N2000 = 1,   // N2000
    PROTOCOL_T2000 = 2,   //
    PROTOCOL_GC7900 = 3,
    PROTOCOL_IC1000 = 4,
    PROTOCOL_IC1010 = 5,
    PROTOCOL_GC7980 = 6,

    PROTOCOL_FL2200 = 0x10,

    PROTOCOL_GC6890 = 0x20, 
};

#pragma pack(push)
#pragma pack(1) // 指定按4字节对齐
typedef struct
{
    int32_t DataCount;
    int32_t DataLength;
    BOOL OnWorking;
    double Minutes;
} CTORGFileStatus;
#pragma pack(pop)

typedef struct tagMergedInfo
{
    int32_t MasterNo;            // 信号通道
    int32_t SlaveNo;             // 信号通道
    int32_t DetectType;          // 检测器类型
    int32_t masterPoints;        // 主通道点数
    int32_t slavePoints;         // 辅通道点数
    char DetectTypeAbbr[8];      // 检测器缩写
    char DetectTypeName[32];     // 检测器名称
    char slaveOrgFile[MAX_PATH]; // 辅通道文件全路径 MAX_PATH=260
    char YLabel[NameLength];     // Y轴单位
} MergedInfo;

typedef struct
{
    TRAWBAG RawBag;       // 谱图数据描述结构指针
    TSMPBAG SmpBag;       // 样品信息描述指针
    TDLLRESINF DllResInf; // 积分结果描述结构指针
} CTORGBag;

typedef struct tagTCalorifParam
{
    BOOL CalorifValid;   // 有效标志
    int32_t GSClass;     // 燃气类别(0-工业煤气, 1-人工煤气, 2-天然气, 3-液化石油气)
    int32_t CaloUnitIdx; //(热值版)体积热值单位索引(0-kC/m^3, 1-kJ/m^3, 2-MJ/m^3)
    int32_t CaloBasedOn; //(热值版)热值数据基准(0-使用低位, 1-使用高位)
    double t1;           // 燃烧温度(0, 15, 20, 25℃)
    double t2;           // 计量温度(0, 15, 20℃)
    double p1;           // 燃烧压力(=101.325kPa)
    double p2;           // 计量压力(=101.325kPa)
} TCalorifParam;

typedef struct tagTGasoSHTParam
{
    BOOL GasoSHTValid; // 有效性标志
    int32_t GasoSHTID; // 汽油中组成分析方法ID(0-未知, 1-SHT0663醇醚测定, 2-SHT0693芳烃测定)
} TGasoSHTParam;

typedef struct tagTHPGParam
{
    BOOL HPGValid;   // 有效性标志
    int32_t HPGType; // 高纯气类别(0-未知, 1-高纯氧, 2-高纯氢, 3-高纯氩, 4-高纯氮, 5-高纯氦, 6-高纯CO2)
} THPGParam;

typedef struct tagTIntegralMethodHead
{
    char mark[8]; // 版本标识
    int32_t ModifyTime;
    BOOL AutoWidth;
    BOOL AutoNoise;
    BOOL AutoDrift;
    float pkWidth;   // 峰宽[min]
    int32_t pkNoise; // 噪声[uV]
    float pkDrift;   // 漂移[uV/sec]
    TIPara IPara;
    TEPara EPara;
    float sliceUsed;   // 是否计算切片结果
    float sliceWidth;  // 切片宽[min]
    int32_t sliceZero; // 切片零点[uV]
    int32_t SmpCatID;
    BOOL Public;
    TUNITCODE pkWidthUnitCode;  // 峰宽单位代码(0-min,1-sec)
    TUNITCODE sliceUnitCode;    // 切片宽单位代码(0-min,1-sec)
    char CalibName[NameLength]; // 使用的校正表名
    BOOL ManualCalib;           // 是否手工输入校正因子
    union
    {
        float YUnit;
        float x114_YMinUnit; // x114版本的定义
    };
    union
    {
        char YLabel[NameLength];
        char x114_YMinLabel[NameLength]; // x114版本的定义
    };
    TUkPkFactor UkPkFactor; // 未知峰校正因子 (至此,size=284bytes)

    // 以下为x113及后续版本的扩充字段:
    union
    {
        char nop[4]; // 补白   (至此,size=288bytes=32*9)
        struct       // 标定后的纯量单位编码:
        {
            WORD CalibAmtUnitType; // 类别 (0-未知, 1-无单位, 2-mg, 3-uL, 4-mmol)
            WORD CalibAmtExCode;   // 扩充码 (NMHC时，用于指明计量基准: 0-未知, 1-以碳计, 2-以甲烷计)
        };
    };
    float cLowerOfSum; // 合计品控下限
    float cUpperOfSum; // 合计品控上限
    char Notes[128];
    union
    {
        char Reserve_x114[600]; // 0x114版本的定义
        struct
        {
            // 0x115版本的定义:
            double XMinUnitK;        // X轴标注单位到最小标注单位的换算系数(XMinUnit=XMinUnitK*XUnit, 默认值=60)
            char XLabel[NameLength]; // X轴的标注单位(默认值=min)
            char XMinLabel[24];      // X轴的最小标注单位(默认值=sec)
            int32_t SuperType;       // 谱图数据类别(0-色谱数据, 1-紫外/可见光谱数据, ...)

            // 0x116版本的定义:
            int32_t IdtQualitMode; // 定性模式(0-时间带, 1-时间窗, 2-顺序法)
            float IdtTimeWindow;   // 时间窗[%]

            int32_t Reserve_;

            union
            {
                struct
                {
                    BOOL CalorifValid;   // 有效标志
                    int32_t GSClass;     // 燃气类别(0-人工煤气, 1-天然气, 2-液化石油气, 3-其它)
                    int32_t CaloUnitIdx; //(热值版)体积热值单位索引(0-kC/m^3, 1-kJ/m^3, 2-MJ/m^3)
                    int32_t CaloBasedOn; //(热值版)热值数据基准(0-使用低位, 1-使用高位)
                    double t1;           // 燃烧温度(0, 15, 20, 25℃)
                    double t2;           // 计量温度(0, 15, 20℃)
                    double p1;           // 燃烧压力(=101.325kPa)
                    double p2;           // 计量压力(=101.325kPa)
                };
                TCalorifParam CalorifParam;
            };

            union
            {
                struct
                {
                    BOOL GasoSHTValid; // 有效标志
                    int32_t GasoSHTID; // 汽油中组成分析方法ID(0-未知, 1-SHT0663醇醚测定, 2-SHT0693芳烃测定)
                };
                TGasoSHTParam GasoSHTParam;
            };

            union
            {
                struct
                {
                    int32_t HPGValid; // 有效标志
                    int32_t HPGType;  // 高纯气类别(0-未知, 1-高纯氧, 2-高纯氢, 3-高纯氩, 4-高纯氮, 5-高纯氦, 6-高纯CO2)
                };
                THPGParam HPGParam;
            };
        };
    };
} TIntegralMethodHead;

typedef struct tagTTprgItem
{
    TDLLTPRGListItem DLLPRGItem; // DLL手动事件表
    BOOL enable;                 // 是否有效
} TTprgItem;

typedef struct tagTGroupItem // 分组表(扩充)
{
    char Name[NameLength];         // 组名
    char IdNames[NameLength * 32]; // 组分名表
    char RefIdName[NameLength];    // 参考组分
    BOOL Continuous;               // 是否连续组
    BOOL NeedRefId;                // 是否需要参考组分(酒版专用)
    float tLower;                  // 时间下限(min.)
    float tUpper;                  // 时间上限(min.)
    float cLower;                  // 品控下限
    float cUpper;                  // 品控上限
    float dLimit;                  // 检出限
    int32_t ConcUnitFactor;        // 浓度单位因子值(0-使用配样信息中指定的含量单位, 2+UNIT_N:%, 3+UNIT_N:‰, 6+UNIT_N:ppm, 9+UNIT_N:ppb, 12+UNIT_N:ppt)
    union
    {
        int32_t Reserve[6]; // 保留字段
        struct
        {
            int32_t HPGOperator;     // 高纯气专用版限值算符
            float HPGLimitValues[3]; // 高纯气专用版限值
        };
    };

} TGroupItem;

typedef struct
{
    char Name[MAX_PATH];              // 方法名
    AUTOPARA autoIPara;               // 积分参数
    TIntegralMethodHead Head;         // 参照TIntegralMethodHead
    TTprgItem tprgList[TPRGBUF_LEN];  // 参照TprgItem
    TGroupItem GroupList[GRPBUF_LEN]; // 参照TGroupItem
    int32_t tprgListLength;           // tprgList数据长度
    int32_t GroupListLength;          // GroupList数据长度

    //--------以下变量无需存储，为dll入口参数
    TDLLIDTListItem idtList[IDTBUF_LEN];        // 参照TDLLIDTListItem
    TDLLGROUPListItem DLLGroupList[GRPBUF_LEN]; // 参照TDLLGROUPListItem
    TDLLTPRGListItem DLLTPRGList[TPRGBUF_LEN];  // 参照TDLLTPRGListItem
    int32_t idtListLength;                      // idtList数据项
    int32_t DLLGroupListLength;                 // DLLGroupList数据项
    int32_t DLLTPRGListLength;                  // DLLTPRGList数据项
    TDLLIDTINF DLLIDTInf;                       // DLLIDT绘图描述
    TDLLGRPINF DLLGRPInf;                       // DLLGRP绘图描述
    TDLLTPRGINF DLLTPRGInf;                     // DLLTPRG绘图描述
} CTIntegralMethod;

typedef struct tagTBslSub // 基线扣除属性
{
    union
    {
        BOOL BySub;      // 是否扣除
        int32_t SubMode; //(空白)扣除模式
    };
    union
    {
        struct // x111及其之前版本
        {
            char BslPath[BslPathLength]; // 基线路径
            char BslName[BslNameLength]; // 基线谱图名
        };
        struct // x112及其之后版本
        {
            union
            {
                int32_t TimeOfs; // 时间轴偏移
                int32_t MdyTime; // 空白结果的修改时间
            };
            BOOL ByOrg;                  // 是否为原始数据
            char SubFile[SubFileLength]; // 待扣除的谱图文件名
        };
    };
} TBslSub;

typedef TBslSub TBlankSub;

struct EVENTLOG
{
    int32_t nos;
    char spec[40];
};

typedef struct tagTORGAxisEx // for >=0x103
{
    float TWidth;     // 坐标宽度
    float VHeight;    // 坐标高度
    int32_t AxisMode; // 谱图坐标范围模式
    float TMin;       // X最小值
    float TMax;       // X最大值
    float VMin;       // Y最小值
    float VMax;       // Y最大值
    // for 0x106:
    BOOL RptUsed;      // 报告谱图范围
    int32_t RAxisMode; // 报告谱图坐标范围模式
    float RTMin;       // 报告X最小值
    float RTMax;       // 报告X最大值
    float RVMin;       // 报告Y最小值
    float RVMax;       // 报告Y最大值
    BOOL bMdyStartTime;      // 报告中的进样时间是否用下面的时间替换
    TDateTime dMdyStartTime; // 修改的进样时间
} TORGAxisEx;                // ORG坐标描述

typedef struct tagTSmpCat // 样品类
{
    int32_t ID;                    // 类编号
    char name[NameLength];         // 类名
    char methodName[NameLength];   // 方法名
    float minutes;                 // 分析时长[min]
    char amtUnit[AmtUnitLength];   // 样品称量单位(ml,ul,mg,ug,mol)
    char stdUnit[AmtUnitLength];   // 组分纯量单位(mg,ml, %,g,ul)
    char concUnit[ConcUnitLength]; //(试样)组分含量单位(%,ppm,ppb,ppt,mg%mL,ug/mL,ng/mL,ng/L)
    union
    {
        char amStd[SpecLength];         // 分析方法标准
        char ExperCorpName[SpecLength]; // 实验单位
    };
    union
    {
        char qcStd[SpecLength];        // 品质控制标准
        char ExperAnalyst[NameLength]; // 实验者
    };

    char rstName[NameLength]; // 报告风格名

    union
    {
        char notes[NoteLength - NameLength];         // 备注
        char ExperAbstract[NoteLength - NameLength]; // 实验备注
    };

    BOOL concAliasUsed;
    BOOL sconAliasUsed;
    char concUnitAlias[UnitAliasLength]; //(试样)组分含量单位别称
    char sconUnitAlias[UnitAliasLength]; //(标样)组分浓度单位别称
    char sconUnit[ConcUnitLength];       //(标样)组分浓度单位(%,ppm,ppb,ppt,mg%mL,ug/mL,ng/mL,ng/L)
    float orgWMinutes;                   // 试样横轴时宽(min)
    float orgHVolts;                     // 试样纵轴高度(mV)
    float stdWMinutes;                   // 标样横轴时宽(min)
    float stdHVolts;                     // 标样纵轴高度(mV)
    float bslWMinutes;                   // 基线横轴时宽(min)
    float bslHVolts;                     // 基线纵轴高度(mV)
    int32_t createTime;                  // 创建时间
    int32_t SignalNo;
    union
    {
        struct
        {
            int32_t SuperType; // 谱图数据类别(0-色谱数据, 1-紫外/可见光谱数据, ...)
        };
        BYTE Reserve_x114[NoteLength]; // 0x114版本的定义
    };
} TSmpCat;

typedef struct tagTMCHead // 样品计量信息
{
    int32_t SmpSn;     // 流水号
    int32_t LastInjSn; // 最后一次进样的流水号
    double amount;     // 样品量(mol,ml,ul,g,mg)
    int32_t injVolK;   // 进样体积单位因子(0-uL, 3-mL, 6-L)

    union
    {
        int32_t nReserve; //(保留字段)
        int32_t NMHCBy;   // NMHC计量基准: 0-未知, 1-以碳计, 2-以甲烷计
    };

    double dilution;    // 稀释体积(定容体积)(ml)
    double enrich;      // 浓缩因子(无单位)
    double injVol;      // 进样量(ul)
    int32_t istdK;      // 内标浓度单位因子
    int32_t amtK;       // 样品称量单位因子
    int32_t concFactor; // 组分浓度(含量)单位因子[0(100:%,mg%ml),1(10^6:ppm),2(10^9:ppb),3(10^12:ppt)]
    BOOL concAliasUsed;
    char concUnitAlias[UnitAliasLength]; //(试样)组分含量单位别称
    union
    {
        struct
        {
            float x113_columnLength; // 柱长(m)
            float x113_deadTime;     // 死时间(min)
        };
        BYTE Reserve[8]; //(保留字段)
    };
    char methodName[NameLength];   // 方法名
    char instCondName[NameLength]; // 仪器条件名
    union
    {
        // Easy3010 (>=0x110):
        struct
        {
            char stdName[NameLength]; // 标准浓度配比名
            union
            {
                int32_t GasoType; // 汽油样品类别 (0-未知, 1-普通汽油, 2-乙醇汽油)
                int32_t HPGLevel; // 高纯气等级 (0-未知, 1-纯气, 2-高纯气, 3-超纯气)
                int32_t nK0;      // 系数nK0
                float k0;         // 系数k0
            };
            union
            {
                float t;     // 温度(K) (标准状态: _t0_=0℃=273K)
                int32_t nK1; // 系数nK1
                float k1;    // 系数k1
            };
            union
            {
                float p;     // 压力(kPa) (标准状态: _p0_=101.3kPa)
                int32_t nK2; // 系数nK2
                float k2;    // 系数k2
            };
            union
            {
                int32_t nK3;     // 系数nK3
                float k3;        // 系数k3
                int32_t stdType; // TVOC或NMHC标样形态 (0-未知形态, 1-气态, 2-液态)
                float Density;   // 样品(如汽油)密度 [g/mL]
            };
            char notes[80]; // 备注
        };
        // Easy3000 (<=0x106):
        char notes_Easy3000[NoteLength];
    };
} TMCHead;

typedef struct tagTSmpBasic // 样品实例信息扩充
{
    int32_t CatID;
    char CatName[NameLength]; // 样品名
    int32_t SmpType;          // 样品类型
    float Minutes;            // 分析时长[min]
    char RstName[NameLength]; // 报告风格
    union
    {
        struct
        {
            int32_t SuperType; // 谱图数据类别(0-色谱数据, 1-紫外/可见光谱数据, ...)
        };
        BYTE Reserve_x114[32]; // 0x114版本的定义
    };
} TSmpBasic;

typedef struct tagTClassify // 样品分类信息
{
    union
    {
        char SampleID[NameLength];  // 样品ID
        char BatchCode[NameLength]; // 样品批号
    };
    char LocaName[NameLength]; // 取样点
    int32_t SrcTime;           // 取样时间
    BOOL FullTime;             // 完整的时间格式
    char sSrcTime[16];         // 取样时间
} TClassify;

typedef struct tagTConcListItem // 组分浓度表结构
{
    char Name[NameLength];
    union
    {
        double Conc;
        struct
        {
            float k;
            float conc;
        };
    };
} TConcListItem;

typedef struct
{
    bool FInjStart;         // 进样开始
    char RawName[MAX_PATH]; // 原始文件名
    TMCHead MCHead;
    int32_t idtConcLength;
    TSmpBasic Basic;    // 参照TSmpBasic
    TClassify Classify; // 参照TClassify
    TBslSub BslSub;     // 参照TBslSub
    TConcListItem idtConc[IDTBUF_LEN];
} CTSmpInfo;

typedef struct tagTSmpInjHead // 进样信息
{
    union
    {
        BYTE Bytes[640];

        struct
        {
            int32_t SmpID;
            int32_t InjID;
            union
            {
                BYTE xGUID[40];
                char GUID[GUIDLength]; // 全球唯一标识码
            };
            char RawName[256];
            int32_t Sn;
            int32_t StartTime;
            int32_t StopTime;
            float AnalMinutes;

            int32_t AxisMode;
            int32_t nReserve; //(保留字段)
            float TMin;
            float TMax;
            float VMin;
            float VMax;

            int32_t VialNos;  // 瓶号
            int32_t Syringe;  // 针序
            char VialPos[16]; // 样品瓶在自动进样器样品盘中的位置
        };
    };
} TSmpInjHead;

#ifndef TAG_TINSTHEAD
#define TAG_TINSTHEAD
typedef struct tagTInstHead // 仪器头信息
{
    union
    {
        BYTE Bytes[256];
        struct
        {
            int32_t ID;            // ID
            int32_t Type;          // 仪器类别(GC, LC, IC, CE-毛细管电泳)
            char TypeAbbr[8];      // 类别缩写
            char TypeName[48];     // 类别名
            char Model[32];        // 型号
            char MarkNo[32];       // 设备号
            char Manufacturer[48]; // 制造商
        };
    };
} TInstHead;
#endif

typedef struct tagTInstCondHead // 仪器条件头信息
{
    union
    {
        TInstHead InstInfo;
        struct
        {
            int32_t InstID;       // ID
            int32_t InstType;     // 仪器类别(GC, LC, IC, CE-毛细管电泳)
            char InstTypeAbbr[8]; // 类别缩写
            union
            {
                char InstTypeName[48];   // 类别名
                char SeparationType[48]; // 分离方法：
                // GC - Gas Chromatography
                //	Gas Liquid Chromatography (气-液)
                //	Gas Solid Chromatography (气-固)
                // LC - Liquid Chromatograhy
                //	Normal Phase Liquid Chromatograhy (正相),
                //	Reversed Phase Liquid Chromatograhy (反相)
                //	Gel Permeation Chromatograhy (凝胶渗透色谱)
                //	Size Exclusion Liquid Chromatograhy(体积排阻色谱SEC)
                // IC - Ion Chromatograhy
                //	Ion Exchange Liquid Chromatograhy (离子交换)
                //	Ion Pair Liquid Chromatograhy (离子对)
                // CE	- Capillary Zone Electrophoresis (毛细管电泳)
                // SFC - Supercritical Fluid Chromatograhy (超临界流体色谱)
                // TLC - Thin Layer Chromatograhy (薄层色谱)
                // FFF - Field Flow Fractionation (场流分离)
                // Other Chromatograhy (其它分离方法)
            };
            char InstModel[32];        // 型号
            char InstMarkNo[32];       // 设备号
            char InstManufacturer[48]; // 制造商
        };
    };

    union
    {
        BYTE Bytes[512 + 256];
        struct
        {
            int32_t ID;               // ID
            int32_t SignalNo;         // 信号通路号
            BOOL FromAIACDF;          // 是否来自AIACDF
            int32_t nReserve;         //(保留字段)
            char CatName[32];         // 样品名
            char InstName[32];        // 仪器名
            char AIACDFName[32];      // AIA-CDF文件名(不含扩展名)
            char Description[128];    // 说明(备注)
            char ExperimentTitle[64]; // 实验标题
            char DatasetOwner[64];    // 谱图数据属源(单位名称)
            char OperatorName[32];    // 操作者(分析员)
        };
    };
} TInstCondHead;

typedef struct tagTOvenInfo // 柱温箱信息
{
    union
    {
        BYTE Bytes[128];
        struct
        {
            BOOL Available;       // 是否有效
            int32_t MaxTempRamps; // 最大程升阶数
            double MaxTemp;       // 最高温度[K]
            double Equilibry;     // 平衡时间[min]
            double dReserve;      //(保留字段)
            char Model[32];       // 型号
        };
    };
} TOvenInfo;

typedef struct tagTPumpInfo // 泵信息
{
    union
    {
        BYTE Bytes[128];
        struct
        {
            BOOL Available;       // 是否有效
            int32_t Type;         // 类别(恒流, 二元梯度, 三元梯度, 四元梯度)
            int32_t GradPresMode; // 梯度压力模式(低压, 高压)
            int32_t nReserve;     //(保留字段)
            double MaxPressure;   // 最高压力[psi]
            double MinPressure;   // 最低压力[psi]
            char Model[32];       // 型号
        };
    };
} TPumpInfo;

typedef struct tagTInletInfo // 进样口信息
{
    union
    {
        BYTE Bytes[128];
        struct
        {
            BOOL Available; // 是否有效
            int32_t Type;   // 类别(PIP-Packed Injection Port, SSL-Capillary Split/Splitless Inlet,
            // COC-Cool On-Column, PTV-Programmable Temperature Vaporization,
            // Volatiles Interface,
            // Rheodyne 7725系列, Rheodyne 9725系列, Rheodyne 3725-038系列)
            char TypeAbbr[8];     // 类别缩写
            char TypeName[32];    // 类别名
            int32_t InjMode;      // 进样方式(Manual, GSV-气体进样阀, Auto Sampler)
            int32_t ASType;       // 自动进样器分类码(暂不使用)
            double InjVolume;     // 定量管体积[uL]
            char InjectModel[32]; // 进样器型号
        };
    };
} TInletInfo;

typedef struct tagTColumnInfo // 色谱柱信息
{
    union
    {
        BYTE Bytes[128];
        struct
        {
            BOOL Available; // 是否有效
            int32_t Type;   // 类别(Packed, Capillary, Wide-Bore Capillary, HPLC Column,
            // GPC Column, IC Column, Unknown)
            char TypeAbbr[8];  // 类别缩写
            char TypeName[32]; // 类别名
            int32_t FreqIdx;   // 采样频率索引号(0-高速,1-快速,2-中速,3-慢速,4-低速)
            int32_t mmLength;  // 柱长[mm]
            double Diameter;   // 内径[mm]
            double FilmThick;  // 膜后[μm]
            double DeadTime;   // 死时间[min]
            char Model[32];    // 型号
            // BYTE	Reserve[16];	//(保留字段)
        };
    };
} TColumnInfo;

typedef struct tagTDetectInfo // 检测器信息
{
    union
    {
        BYTE Bytes[256];
        struct
        {
            BOOL Available; // 是否有效
            int32_t Type;   // 类别(FID, TCD, ECD, NPD, FPD, PID, HID-氦离子化检测器, MSD
            // UVD, RID, DAD, FD, ECD-电化学, CD-电导, ELSD-蒸发光散射)
            char TypeAbbr[8];      // 类别缩写
            char TypeName[32];     // 类别名
            char Model[32];        // 型号
            double RangeMax;       // 响应最大值
            double RangeMin;       // 响应最小值
            double RangeValue;     // 检测量程[满偏检测量]
            double Sensitivity;    // 检测灵敏度(以量程单位表示的检测量/lsb)
            char DeteUnit[16];     // 检测单位
            char RangeOptions[96]; // 量程选项表
        };
    };
} TDetectInfo;

typedef struct tagTAuxiliaryInfo // 辅助区信息
{
    union
    {
        BYTE Bytes[128];
        struct
        {
            BOOL Available;    // 是否有效
            int32_t Type;      // 部件类别
            char TypeAbbr[8];  // 类别缩写
            char TypeName[32]; // 类别名
            char Model[32];    // 型号
            int32_t SensType;  // 传感类别(0-温度, 1-压力, 2-流量)
            BOOL OnOff;        // 开关状态
            int32_t PosNo;     // 位置号(从1算起)
        };
    };
} TAuxiliaryInfo;

typedef struct tagTSignalInfo // 信号通路
{
    union
    {
        BYTE Bytes[64];
        struct
        {
            BOOL Available;      // 是否有效
            int32_t OvenNo;      // 柱箱序号(索引号+1)
            int32_t InletNo;     // 进样口序号(索引号+1)
            int32_t ColumnNo;    // 柱序号(索引号+1)
            int32_t DetectNo;    // 检测器序号(索引号+1)
            int32_t AuxiliaryNo; // 辅助区序号(索引号+1)
            int32_t ExCol1No;    // 扩充柱1序号
            int32_t ExCol2No;    // 扩充柱2序号

            union
            {
                int32_t ExDet1No; // 扩充检测器1序号
                int32_t PathID;   // 通道ID
            };

            int32_t ExDet2No; // 扩充检测器2序号
            int32_t ExAux1No; // 扩充辅助区1序号
            int32_t ExAux2No; // 扩充辅助区2序号
            BYTE Reserve[16]; //(保留字段)
        };
    };
} TSignalInfo;

#ifndef TAG_TPUMPCOND
#define TAG_TPUMPCOND
// 泵条件
typedef struct tagTPumpCond 
{
    union
    {
        TPumpInfo Info;
        struct
        {
            BOOL Available;       // 是否有效
            int32_t Type;         // 类别(恒流, 二元梯度, 三元梯度, 四元梯度)
            int32_t GradPresMode; // 梯度压力模式(低压, 高压)
            int32_t nReserve;     //(保留字段)
            double MaxPressure;   // 最高压力[psi]
            double MinPressure;   // 最低压力[psi]
            char Model[32];       // 型号
        };
    };

    union
    {
        BYTE Bytes[256];
        struct
        {
            double TotalFlow;    // 泵流量[mL/min]
            double Pressure;     // 泵压[psi]
            double SolRatio[4];  // 溶剂配比[%]
            BOOL SolUsed[4];     // 溶剂是否被采用
            char SolName[4][32]; // 溶剂名称
            char FlowUnit[16];   // 泵流量单位[mL/min, …]
            char PresUnit[16];   // 泵压单位[Mpa, psi, bar]
        };
    };
} TPumpCond;
#endif

#ifndef TAG_TAUXCOND
#define TAG_TAUXCOND
// 辅助区条件
typedef struct tagTAuxCond 
{
    union
    {
        TAuxiliaryInfo Info;
        struct
        {
            BOOL Available;    // 是否有效
            int32_t Type;      // 类别
            char TypeAbbr[8];  // 类别缩写
            char TypeName[32]; // 类别名
            char Model[32];    // 型号
            int32_t SensType;  // 传感类别(0-温度, 1-压力, 2-流量)
            BOOL OnOff;        // 开关状态
            int32_t PosNo;     // 位置号(从1算起)
        };
    };

    union
    {
        BYTE Bytes[128];
        struct
        {
            double Temperature; // 温度[K]
            int32_t TempMode;   // 温度模式(0-Constant, 1-Programmed)
        };
        struct
        {
            double Pressure;  // 压力[psi]
            int32_t PresMode; // 压力模式(0-Constant, 1-Programmed)
        };
        struct
        {
            double Flow;      // 流量[mL/min]
            int32_t FlowMode; // 流量模式(0-Constant, 1-Programmed)
        };
    };
} TAuxCond;
#endif

#ifndef TAG_TDETECTCOND
#define TAG_TDETECTCOND
typedef struct tagTDetectCond // 检测器条件
{
    union
    {
        TDetectInfo Info;
        struct
        {
            BOOL Available; // 是否有效
            int32_t Type;   // 类别(FID, TCD, ECD, NPD, FPD, PID, HID-氦离子化检测器, MSD
            // UVD, RID, DAD, FD, ECD-电化学, CD-电导, ELSD-蒸发光散射)
            char TypeAbbr[8];      // 类别缩写
            char TypeName[32];     // 类别名
            char Model[32];        // 型号
            double RangeMax;       // 响应最大值
            double RangeMin;       // 响应最小值
            double RangeValue;     // 检测量程[满偏检测量]
            double Sensitivity;    // 检测灵敏度(以量程单位表示的检测量/lsb)
            char DeteUnit[16];     // 检测单位
            char RangeOptions[96]; // 量程选项表
        };
    };

    union
    {
        BYTE Bytes[128];
        struct
        {
            union
            {
                struct
                {
                    double Temperature; // 检测器温度[K]
                    double H2Flow;      // H2流速[mL/min]
                    union
                    {
                        double AirFlow;   // Air流速[mL/min]
                        double RefFlow;   // TCD参考流速[mL/min]
                        double AnodeFlow; // ECD阳极流速[mL/min]
                    };

                    double Current;     // 检测器电流[mA, ECD为0.1nA]
                    char MakeupGas[16]; // 尾吹气体(N2, H2, He, Ar氩气, CH4, Unknown)
                    double MakeupFlow;  // 尾吹流速[mL/min]
                    int32_t MakeupMode; // 尾吹模式(makeup=const, col+makeup=const)
                    union
                    {
                        int32_t nReserve_x114; //(保留字段)
                        int32_t GC_RangeIDInc; // GC之FID/NPD/FPD的量程ID+1 (0x115及后续版本)
                    };
                };
                struct
                {
                    double WaveLength;      // 检测波长[nm]
                    int32_t WaveLengthMode; // 波长模式(Constant, Programmed)
                };
                struct
                {
                    double SuppCurrent; // 抑制器电流[mA]
                    BOOL SuppAvailable; // 抑制器是否有效
                };
            };
        };
    };
} TDetectCond;
#endif

#ifndef TAG_TCOLUMNCOND
#define TAG_TCOLUMNCOND
// 色谱柱条件
typedef struct tagTColumnCond 
{
    union
    {
        TColumnInfo Info;
        struct
        {
            BOOL Available; // 是否有效
            int32_t Type;   // 类别(Packed, Capillary, Wide-Bore Capillary, HPLC Column,
            // GPC Column, IC Column, Unknown)
            char TypeAbbr[8];  // 类别缩写
            char TypeName[32]; // 类别名
            int32_t FreqIdx;   // 采样频率索引号(0-高速,1-快速,2-中速,3-慢速,4-低速)
            int32_t mmLength;  // 柱长[mm]
            double Diameter;   // 内径[mm]
            double FilmThick;  // 膜后[μm]
            double DeadTime;   // 死时间[min]
            char Model[32];    // 型号规格
        };
    };

    union
    {
        BYTE Bytes[128];
        struct
        {
            double Flow;     // 柱流量[mL/min]
            double Pressure; // 柱压[psi]
            int32_t PFMode;  // 柱压力/流量模式(Const Pressure, Const Flow, Programmed Pressure, Programmed Flow)
        };
    };
} TColumnCond;
#endif

#ifndef TAG_TINLETCOND
#define TAG_TINLETCOND
// 进样口条件
typedef struct tagTInletCond 
{
    union
    {
        TInletInfo Info;
        struct
        {
            BOOL Available;       // 是否有效
            int32_t Type;         // 类别(PIP-Packed Injection Port, SSL-Capillary Split/Splitless Inlet, ...)
            char TypeAbbr[8];     // 类别缩写
            char TypeName[32];    // 类别名
            int32_t InjMode;      // 进样方式(Manual, GSV-气体进样阀, Auto Sampler)
            int32_t ASType;       // 自动进样器分类码(暂不使用)
            double InjVolume;     // 定量管体积[uL]
            char InjectModel[32]; // 进样器型号
        };
    };

    union
    {
        BYTE Bytes[128];
        struct
        {
            int32_t TempMode;   // 进样口温度模式(0-Constant Temp, 1-Programmed(COC或PTV时))
            int32_t nReserve;   //(保留字段)
            int32_t SplitMode;  // 分流方式(Splitless, Split)
            BOOL PurgeOn;       // 是否隔膜清洗
            double Temperature; // 进样口温度[K]
            char CarrierGas[8]; // 载气(N2, H2, He, ...)
            double CarrierFlow; // 载气流速[mL/min]	// CarrierFlow = SplitFlow+PurgeFlow+ColumnFlow
            double Pressure;    // 进样口压力[psi]
            double SplitFlow;   // 分流流速[mL/min]
            char SplitRatio[8]; // 分流比
            double PurgeFlow;   // 隔膜清洗流速[mL/min]
            union
            {
                double PurgeTime;     // 隔膜清洗时间[min]
                double SplitlessHold; // 不分流保持时间
            };
        };
    };
} TInletCond;
#endif

#ifndef TAG_TOVENCOND
#define TAG_TOVENCOND
// 柱箱条件
typedef struct tagTOvenCond 
{
    union
    {
        TOvenInfo Info;
        struct
        {
            BOOL Available;       // 是否有效
            int32_t MaxTempRamps; // 最大程升阶数
            char Model[32];       // 型号
            double MaxTemp;       // 最高温度[K]
            double Equilibry;     // 平衡时间[min]
        };
    };

    union
    {
        BYTE Bytes[128];
        struct
        {
            double Temperature; // 柱温[K]
            int32_t TempMode;   // 柱温模式(0-Constant Temp, 1-Programmed)
        };
    };
} TOvenCond;
#endif

#ifndef TAG_TRAMPITEM
#define TAG_TRAMPITEM
typedef struct tagTRampItem // 温度(压力/流量)升降程序
{
    double RampRate;   // 升降速率[℃/min, psi/min, mL/min]
    double FinalValue; // 终值[K, psi, mL/min]
    double HoldTime;   // 保持时间[min]
    double TotalTime;  // 总计时间[min]
} TRampItem;
#endif

#ifndef TAG_TPUMPGRADITEM
#define TAG_TPUMPGRADITEM
typedef struct tagTPumpGradItem // 泵梯度程序
{
    double Time;        // 时间[min]
    double TotalFlow;   // 总流量[mL/min]
    double SolRatio[4]; // 各溶剂占的比率[%]
} TPumpGradItem;
#endif

#ifndef TAG_TWAVELENGTHITEM
#define TAG_TWAVELENGTHITEM
typedef struct tagTWaveLengthItem // 波长程序
{
    double Time;     // 时间[min]
    int32_t Value;   // 波长
    BYTE Reserve[4]; //(保留字段)
} TWaveLengthItem;
#endif

#ifndef TAG_TFLOATRAMPITEM
#define TAG_TFLOATRAMPITEM
typedef struct tagTFloatRampItem // 单精度浮点数阶升数据项
{
    float RampRate;   // 升降速率[℃/min, psi/min, mL/min]
    float FinalValue; // 终值[K, psi, mL/min]
    float HoldTime;   // 保持时间[min]
    float TotalTime;  // 总计时间[min]
} TFloatRampItem;
#endif

#ifndef TAG_TAUXCONDEX
#define TAG_TAUXCONDEX
typedef struct tagTAuxCondEx // 扩充的辅助区条件
{
    union
    {
        TAuxiliaryInfo Info;
        struct
        {
            BOOL Available;    // 是否有效
            int32_t Type;      // 类别(辅助加热区类型/辅助压力的气体类型)
            char TypeAbbr[8];  // 类别缩写
            char TypeName[32]; // 类别名
            char Model[32];    // 型号(即辅助区说明)
            int32_t SensType;  // 传感类别(0-温度, 1-压力, 2-流量)
            BOOL OnOff;        // 开关状态
            int32_t PosNo;     // 位置号(从1算起)
        };
    };

    union
    {
        BYTE Bytes[128];
        TFloatRampItem RampItems[_MaxAuxFloatRampItems_]; // 阶升数据(含初时值, 温度-K, 压力-psi, 流量-mL/min)
    };
} TAuxCondEx;
#endif

typedef struct
{
    char Name[MAX_PATH];    // 仪器条件名
    TInstCondHead Head;     // 参照TInstCondHead
    TOvenCond OvenCond;     // 柱箱条件
    TInletCond InletCond;   // 进样口条件
    TColumnCond ColumnCond; // 柱条件条件
    TDetectCond DetectCond; // 检测器条件
    TAuxCond AuxCond;       // 辅助区条件
    TPumpCond PumpCond;     // 泵条件

    TRampItem OvenTempItems[MAX_RAMPITEM];         // 柱箱程序升温梯度
    TRampItem InletTempItems[MAX_RAMPITEM];        // 进样口程序升温梯度
    TRampItem ColumnPFItems[MAX_RAMPITEM];         // 柱程序压力梯度
    TRampItem MakeupFlowItems[MAX_RAMPITEM];       // 吹扫气程序流量梯度
    TPumpGradItem PumpGradItems[MAX_RAMPITEM];     // 泵程序流量梯度
    TWaveLengthItem WaveLengthItems[MAX_RAMPITEM]; // 光谱箱程序波长梯度

    TAuxCondEx AuxCondExs[MAX_RAMPITEM]; // 扩充的辅助区条件

    int32_t OvenTempItemsLength;
    int32_t InletTempItemsLength;
    int32_t ColumnPFItemsLength;
    int32_t MakeupFlowItemsLength;
    int32_t PumpGradItemsLength;
    int32_t WaveLengthItemsLength;
    int32_t AuxCondExsLength;
} CTInstCond;

typedef struct
{
    CTIntegralMethod IntegralMethod; // 积分方法
    TORGAxisEx ORGAxisEx;            // 坐标信息
    TSmpCat SmpCat;                  // 样品类信息
    CTSmpInfo SmpInfo;               // 样品信息
    TSmpInjHead SmpInjHead;          // 进样信息
    CTInstCond InstCond;             // 进样条件

    TBlankSub BlankSub;           // 空白扣除头信息
    int32_t SmpID;                // 样品ID
    int32_t sn;                   // 序列id,使用GetInjSn获取
    int32_t InjID;                // 进样ID
    char UseMethodName[MAX_PATH]; // 方法名
    char SampleClass[MAX_PATH];   // 样品类名
    bool Modified;                // 修改
    bool AxisModified;            // 坐标修改
    bool AxisZoomed;              // 坐标放大
    bool AxisScrolled;            // 坐标自动卷动
    bool MethodModified;          // 方法修改
    bool EparaModified;           // 积分参数修改
    char FileName[MAX_PATH];      // 文件名
    char UseMethodSrc[MAX_PATH];  // 使用方法源
    int32_t Index;                // 索引,再处理显示谱图时为止需要
    bool SelAllPeaks;             // 选择所有峰

    EVENTLOG UndoEventLog[8]; // Undo记录
    EVENTLOG RedoEventLog[8]; // Reduo记录
    int32_t UndoEventLogCount;
    int32_t RedoEventLogCount;
    bool ByOrigin;            // 保持原始打开
    bool ByLoadMethod;        // 重新加载UseMethodName指向的方法
    bool ByReAnalysis;        // 重新积分
    int32_t BaseColor;        // 基线颜色
    int32_t SplitColor;       // 分割线颜色
    int32_t MarkColor;        // Mark颜色
    int32_t ChromColor;       // 谱图颜色
    bool BaseLineVisible;     // 基线可见,是指基线谱图,不是指积分结果的基线
    int32_t Marks;            // 显示的Mark类型掩码
    double YUnit;             // Y坐标单位          //1000
    double YMinUnit;          // Y坐标最小单位      //1
    double XUnit;             // X坐标单位          //1
    double XMinUnitK;         // X坐标最小单位      //60
    double YUnitEx;           // Y坐标单位扩充      //iso单位
    char YLabel[MAX_PATH];    // Y坐标名            //mV
    char YMinLabel[MAX_PATH]; // Y最小坐标名        //uV
    char XLabel[MAX_PATH];    // X坐标名            //min
    char XMinLabel[MAX_PATH]; // X最小坐标名        //s
    char YLabelEx[MAX_PATH];  // Y坐标名扩充        //iso单位
} CTORGFile;

typedef struct
{
    TMCHead MCHead;
    TConcListItem idtConc[IDTBUF_LEN];
    int idtConcLength;
} CTMetricConc;

typedef struct tagTSynResultItem // 综合结果
{
    char Name[NameLength]; // 组分名/组名
    int Type;              // 0-组分, 1-连续组, 2-间断组, 3-未知峰合计, 4-外部组分, 5-主要组成, -1-合计
    int OkState;           // 0-未检出, 1-偏低, 2-偏高, 3-OK
    union
    {
        struct
        {
            float Tr;   // 保留时间
            float Band; // 带宽
        };
        struct
        {
            float tLower; // 时间下限
            float tUpper; // 时间上限
        };
    };
    float cLower;       // 品控下限
    float cUpper;       // 品控上限
    double Area;        // 组累计峰面积
    double Height;      // 组累计峰高
    double Conc;        // 实测含量
    double ConcEx;      // 含量扩充(如发热量、TVOC标准状态含量等)
    float dLimit;       // 检出限
    int ConcUnitFactor; // 浓度单位因子值(0-使用配样信息中指定的含量单位, 2+UNIT_N:%, 3+UNIT_N:‰, 6+UNIT_N:ppm, 9+UNIT_N:ppb, 12+UNIT_N:ppt)
    union
    {
        int Reserve[6]; // 保留字段
        struct
        {
            int HPGOperator;         // 高纯气专用版限值算符
            float HPGLimitValues[3]; // 高纯气专用版限值
        };
    };

} TSynResultItem;

typedef struct tagTOptionHead
{
    int CardType;               // 采集器类型
    int CardNum;                // 采集器数目
    int ComAdcPortIdx[MAXCARD]; // 串口采集器连接的通讯口索引号
    float CardFreq[MAXCARD];    // 采集器的基准频率

    // bool AllowSimulate;     //允许模拟进样    (V9.12中摒弃)
    bool AllowBslView;    // 允许基线查看
    bool AllowResendData; // 允许数据重发
    bool AllowMultiStart; // 允许同时启动多通道
    bool AllowRemoteStop; // 允许远程停止

    // 以下为高级设置(与固件版本及Licence有关)：
    bool AllowSlicesCalc;    // 支持切片计算      (V9.12中调整)
    bool AllowGroupCalc;     // 支持分组计算      (V9.12中新增)
    bool AllowUkPkFactor;    // 支持未知峰校正    (V9.12中新增)
    bool AllowBlankSub;      // 支持空白扣除      (V9.12中新增)
    bool AllowFingerPrint;   // 支持指纹谱图接口
    bool AllowSequenceInj;   // 支持序列进样
    bool AllowIdtColBasedOn; // 支持面积与峰高混合定量
    bool AllowQCQA;          // 支持QC/QA (支持含量指标上下限)
    bool AllowExternEvents;  // 支持外部事件
    bool AllowDataMerge;     // 支持通道合并
    bool AllowResultsDB;     // 支持分析结果入库

    bool CalibOneByOne;
    bool AdcStatusDlg;
    int SplitMode;
    bool Logined[MAX_CHANNEL];
    bool LoadMethodOnOpenORG;
    bool ReAnalysisOnOpenORG;
    bool ShowOnlineHelp;
    bool RepPrintByQRPrinter; // 直接打印触发
    bool FastDrawChartRep;    // 快速绘图报告
    bool EnglishReport;       // 英文报告
    bool EnglishMultiReport;  // 英文重复性报告
    bool IsoHAUnitUsed;       // 是否采用国际惯用峰高计量单位(mV、mAU、uS)
    bool StartSound;          // 开始时声音提示
    bool StopSound;           // 停止时声音提示
    bool StopDialog;          // 手工停止时对话框确认
    bool AbortSound;          // 放弃时声音提示
    bool AbortDialog;         // 放弃时对话框确认
    bool OnlineToolBar;       // 显示做样窗体的“工具栏”
    bool OnlineTreePanel;     // 显示做样窗体的“样品树”
    bool OnlineSmpPanel;      // 显示做样窗体的“做样框”
    bool OnlineSmpButtons;    // 显示做样窗体的“做样按钮”

    bool KeepContinuingFileSN;       // 是否需确保文件流水号不间断
    bool DeleteFileOnDelSmpTreeLeaf; // 删除样品树页时是否一并删除对应的谱图文件

    int MaxRawFilesOfPRule; // 规定路径下允许保存的文件个数
    int CalibSeriesColor;
    char ViewOrgDir[MAX_PATH];    // 谱图浏览的当前目录
    char ResultsDBPath[MAX_PATH]; // 分析结果入库的基本路径
    char ReportPrinter[MAX_PATH]; // 打印机名
} TOptionHead;

typedef struct tagTChartViewOption // 谱图显示属性
{
    bool GridVisible;      // 网格线标志
    bool AxisVisible;      // 坐标轴标志
    bool BaseLineVisible;  // 积分基线标志
    bool SplitLineVisible; // 分割线标志
    int Marks;             // 注释标志
    int BaseLineColor;     // 积分基线颜色
    int SplitLineColor;    // 分割线颜色
    int MarkColor;         // 注释颜色
} TChartViewOption;

typedef struct tagTOnLineOptionHead
{
    char CatName[MAX_PATH];
    bool TreePanel;
    bool SmpPanel;
    bool SmpButtons;
    bool SmpLocaPanel;
    bool SmpTimePanel;
    bool AutoGotoIdt;
    bool AutoGotoOffline;
    bool AutoGotoResult;
    bool GridVisible;
    bool AxisVisible;
    bool BaseLineVisible;
    int Marks;
    TChartViewOption OffChartOption; // 进样后处理谱图显示属性
    bool AutoReport;
    bool AutoCurInj;
    bool AutoResultsDB;      // 停止后分析结果自动入库
    bool AutoExcelData;      // 停止后自动保存Excel谱图数据文件
    bool AutoResultTxt;      // 停止后自动保存结果文本文件
    bool AutoChromBmp;       // 停止后自动保存谱图位图文件
    bool AutoSliceTxt;       // 停止后自动保存切片文本文件
    bool AutoFingerPrintTxt; // 停止后自动保存指纹图谱文本文件
    bool AutoReportPDF;      // 停止后自动输出PDF报告
    bool AutoZero;           // 采集数据时自动调零
    bool RemoteStop;         // 远程停止
    bool RealTimeAnal;
    int TAxis;        // 时宽
    int VAxis;        // 衰减
    double YZero;     // 信号零点
    int BslZeroRatio; // 基线回零幅度(%)
    int AxisMode;

    bool ViewHideUkPk;       // 隐藏未知组分
    bool ViewResMoreColumns; // 列出峰位信息
    bool ViewSysMoreColumns; // 显示更多的列(如1/4高峰宽)

    bool BySequence;        // 采用序列进样方式
    char SeqName[MAX_PATH]; // 序列表名

    // 兼容UVD
    char UVDCatName[MAX_PATH]; // 光谱数据样品类名
    int UVDTAxis;              // 光谱数据横轴宽
    int UVDVAxis;              // 光谱数据纵轴衰减

    int TablesHeight; // 数据表高度

} TOnLineOptionHead;

typedef struct tagTOffLineOptionHead
{
    TChartViewOption ChartViewOption; // 谱图显示属性
    int SeriesColor[MAX_SERIES];
    int xSeriesListPos;
    int ySeriesListPos;
    bool ViewSeriesList;
    bool ViewPeakPara;
    bool ViewTPGList;
    bool ViewIDT;
    bool ViewGroupList;
    bool ViewResultList;
    bool ViewSynResult;
    bool ViewMultiPeak;
    bool ViewSys;
    bool ViewSliceResult;
    bool ViewCalorifResult; // 显示燃气热值

    bool ViewHideUkPk;       // 隐藏未知组分
    bool ViewResMoreColumns; // 列出峰位信息
    bool ViewSysMoreColumns; // 显示更多的列(如1/4高峰宽)

    int TablesHeight; // 数据表高度

    bool TPRGDialogOn; // 显示手动事件确认对话框
    char MultiRstName[MAX_PATH];
    char ImportDir[MAX_PATH]; // 导入目录
    char ExportDir[MAX_PATH]; // 导出目录
} TOffLineOptionHead;

// 热值结果表栏目选项
typedef struct tagTCalorifColumnsOption
{
    bool IdealOn;   // 理想气体数据
    bool RealOn;    // 真实气体数据
    bool MolOn;     // 摩尔发热量
    bool MasOn;     // 质量发热量
    bool VolOn;     // 体积发热量
    bool DensityOn; // 密度数据
    bool WobbeOn;   // 沃泊指数
    bool CPOn;      // 燃烧势
    bool MONOn;     // 辛烷值
} TCalorifColumnsOption;

typedef struct
{
    char AppKeyRoot[MAX_PATH];                    // 注册表存储位置
    TOptionHead Head;                             // 参见TOption
    TOnLineOptionHead OnLineOptions[MAX_CHANNEL]; // 参见TOnLineOptionHead
    TOffLineOptionHead OffLineOption;             // 参见TOffLineOptionHead
    TCalorifColumnsOption CalorifColumns;         // 参见TCalorifColumnsOption
    char BaseDirItems[MAX_BASEDIRITEM][MAX_PATH]; // 文件生成规则的起始根目录列表
} CTMROption;

typedef struct tagTSmpSettingsHead
{
    char CatName[NameLength];
    int Version;
    int SmpType;
    int SmpSn[MAX_SMPTYPE];
    BOOL SmpTimeToday;
    union
    {
        struct
        {
            int SuperType; // 谱图数据类别(0-色谱数据, 1-紫外/可见光谱数据, ...)
        };
        BYTE Reserve[128];
    };
} TSmpSettingsHead;

typedef struct
{
    char BaseDir[MAX_PATH];         // 选择的生成规则的起始根目录
    bool SubDirUsed[5];             // 是否使用子目录
    int SubDirMode[5];              // 子目录的定义方式
    char SubDirDef[5][MAX_PATH];    // 子目录的自定义串
    char SubDirDefOpt[5][MAX_PATH]; // 子目录的自定义选项表
    char DateFormat[MAX_PATH];      // 子目录选项中的进样日期格式(yyyy, yyyy-mm, yyyy-mm-dd, yyyy\mm, yyyy\mm\dd)
    char LastRawDir[MAX_PATH];      // 最后的文件目录
    bool IsAppendixDir;             // 最后的文件目录是否为文件数超限时的附加目录

    // 以下为文件名规则：
    int IdxPrix;                                  // 前缀
    int IdxBody;                                  // 主体
    int IdxTail;                                  // 后缀
    int IdxSplit1;                                // 前缀与主体间的分隔符
    int IdxSplit2;                                // 主体与后缀间的分隔符
    char DefPrix[MAX_PATH];                       // 前缀的自定义串
    char DefBody[MAX_PATH];                       // 主体的自定义串
    bool KeepContinuingFileSN;                    // 需确保文件流水号不间断的标志
    char CatName[MAX_PATH];                       // 样品名
    char SeqName[MAX_PATH];                       // 序列表名
    bool ForSequence;                             // 是否用于序列进样
    int MaxRawFiles;                              // 允许保存的谱图文件个数
    int FileCount;                                // 最后文件目录下的谱图文件个数
    char BaseDirItems[MAX_BASEDIRITEM][MAX_PATH]; // 文件生成规则的起始根目录列表
} CTPFRule;

typedef struct
{
    TSmpSettingsHead Head;           // 参见TSmpSettingsHead
    TClassify Classify;              // 参见TClassify
    TBslSub BslSub[MAX_SMPTYPE];     // 参见TBslSub
    TBlankSub BlankSub[MAX_SMPTYPE]; // 参见TBlankSub
    CTPFRule PFRule;                 // 文件生成规则
} CTSmpSettings;

typedef struct
{
    TSmpCat Head;
    int SmpType;
    char StdName[NameLength];
} CTCatInfo;

typedef struct tagTSectionItem // 以min表示的时间片段结构定义
{
    double ts;    // 起始时间[min]
    double te;    // 结束时间[min]
    double delay; // 延迟[min]
    BOOL Enabled; // 是否有效
} TSectionItem;

typedef struct tagTSectionPtItem // 以计数点表示的时间片段结构定义
{
    int ts;    // 起始时间[point]
    int te;    // 结束时间[point]
    int delay; // 延迟[point]
} TSectionPtItem;

typedef struct
{
    int MergeMode;               // 合并方式
    HWND DCHandle;               // 本通道窗体句柄
    int SelfCh;                  // 本通道
    BOOL isSlaveCh[MAX_CHANNEL]; // 辅通道
    BOOL OnWorking;              // 正在合并
    int TsCount;                 // 起始点
    int TeCount;                 // 结束点
    int TimeSectionsCount;
    int TimePtSectionsCount;
    TSectionItem TimeSections[MAX_ARRAYITEM];     // 以min表示的时间片段集
    TSectionPtItem TimePtSections[MAX_ARRAYITEM]; // 以计数点表示的时间片段集
} CTDataMerge;

typedef struct
{
    char Name[MAX_PATH]; // 仪器条件名
    TInstHead Head;      // 参照TInstCondHead
    TOvenInfo Ovens[MaxInstItemLength];
    TInletInfo Inlets[MaxInstItemLength];
    TColumnInfo Columns[MaxInstItemLength];
    TDetectInfo Detects[MaxInstItemLength];
    TAuxiliaryInfo Auxiliaries[MaxInstItemLength];
    TPumpInfo Pumps[MaxInstItemLength];
    TSignalInfo Signals[MaxInstItemLength];

    int OvensLength;
    int InletsLength;
    int ColumnsLength;
    int DetectsLength;
    int AuxiliariesLength;
    int PumpsLength;
    int SignalsLength;
} CTInstrument;